import { BROADCAST, OPEN_MULT, SEND_MESSAGE_TO_ALL, TO_VIEW } from '@/ipc-event-names/mult'
import { ipcMain, BrowserWindow } from 'electron'
import path from 'path'

/**
 * 主进程注册多屏事件
 */
;(function registMultEvent() {
  // 接收要求广播的消息 发送给所有窗口
  ipcMain.on(SEND_MESSAGE_TO_ALL, (event, message) => {
    console.log('接收到广播消息', message)

    const webContents = event.sender
    const win = BrowserWindow.fromWebContents(webContents)

    const windows = BrowserWindow.getAllWindows().filter((q) => q !== win)

    for (const iterator of windows) {
      iterator.webContents.send(BROADCAST, message)
    }
  })

  // 接收多屏打开消息
  ipcMain.on(OPEN_MULT, () => {
    // 此处写法仅做示例，实际开发中多屏应用路由可以由配置文件决定，此处使用具体路径，为方便配置文件书写更推荐使用命名路由
    // 参考 https://router.vuejs.org/zh/guide/essentials/navigation.html
    const routePath = ['/mult/one', '/mult/two']

    console.log('接收到多屏消息')

    for (const iterator of routePath) {
      const mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        // 渲染后再展示
        show: false,
        webPreferences: {
          preload: path.join(__dirname, 'preload.js'),
          // 开发环境启用devTools
          devTools: process.env.NODE_ENV === 'development'
        }
      })

      console.log();
      

      // 判断是否是开发环境
      if (MAIN_WINDOW_VITE_DEV_SERVER_URL) {
        mainWindow.loadURL(MAIN_WINDOW_VITE_DEV_SERVER_URL)
      }
      // 生产环境通过构建好的资源加载窗口
      else {
        mainWindow.loadFile(path.join(__dirname, `../renderer/${MAIN_WINDOW_VITE_NAME}/index.html`))
      }

      // 渲染之后再显示
      mainWindow.once('ready-to-show', () => {
        mainWindow.webContents.send(TO_VIEW, iterator)
        mainWindow.show()
      })

      mainWindow.webContents.openDevTools()
    }
  })
})()
